কনটেন্ট সিকিউরিটি পলিসি (CSP) এবং অন্যান্য ফ্রন্টএন্ড সিকিউরিটি হেডারগুলির একটি বিস্তারিত গাইড, যা ওয়েব অ্যাপ্লিকেশনগুলিকে আক্রমণ থেকে রক্ষা করে এবং বিশ্বব্যাপী ব্যবহারকারীর নিরাপত্তা বাড়ায়।
ফ্রন্টএন্ড সিকিউরিটি হেডারস: কনটেন্ট সিকিউরিটি পলিসি (CSP)-তে দক্ষতা অর্জন
আজকের ডিজিটাল জগতে, যেখানে ওয়েব অ্যাপ্লিকেশনগুলি ক্রমবর্ধমান জটিল এবং আন্তঃসংযুক্ত, সেখানে নিরাপত্তা হুমকি থেকে রক্ষা পাওয়া অত্যন্ত গুরুত্বপূর্ণ। যদিও ব্যাকএন্ড নিরাপত্তা প্রায়শই যথেষ্ট মনোযোগ পায়, ফ্রন্টএন্ড নিরাপত্তাও সমানভাবে জরুরি। ফ্রন্টএন্ড সিকিউরিটি হেডারগুলি প্রথম সারির প্রতিরক্ষা হিসাবে কাজ করে, ব্রাউজারকে কীভাবে আচরণ করতে হবে সে সম্পর্কে নির্দেশাবলী প্রদান করে এবং ব্যবহারকারীদের বিভিন্ন আক্রমণ থেকে রক্ষা করে। এই হেডারগুলির মধ্যে, কনটেন্ট সিকিউরিটি পলিসি (CSP) একটি শক্তিশালী টুল হিসাবে পরিচিত যা বিস্তৃত ঝুঁকি কমাতে সাহায্য করে।
ফ্রন্টএন্ড সিকিউরিটি হেডারস কী?
ফ্রন্টএন্ড সিকিউরিটি হেডার হলো HTTP রেসপন্স হেডার যা একটি ওয়েব সার্ভার ব্রাউজারে পাঠায়। এই হেডারগুলিতে ব্রাউজার প্রাপ্ত কন্টেন্ট কীভাবে পরিচালনা করবে তার নির্দেশাবলী থাকে। এগুলি সাধারণ আক্রমণ প্রতিরোধে সহায়তা করে যেমন:
- ক্রস-সাইট স্ক্রিপ্টিং (XSS): বিশ্বস্ত ওয়েবসাইটে ক্ষতিকারক স্ক্রিপ্ট প্রবেশ করানো।
- ক্লিকজ্যাকিং: ব্যবহারকারীদের যা দেখছে তার থেকে ভিন্ন কিছুতে ক্লিক করার জন্য প্রতারিত করা।
- ম্যান-ইন-দ্য-মিডল অ্যাটাকস: ব্যবহারকারী এবং সার্ভারের মধ্যে যোগাযোগে বাধা সৃষ্টি করা।
কিছু অত্যন্ত গুরুত্বপূর্ণ ফ্রন্টএন্ড সিকিউরিটি হেডার হলো:
- কনটেন্ট সিকিউরিটি পলিসি (CSP): ব্রাউজার কোন কোন উৎস থেকে রিসোর্স লোড করার অনুমতি পাবে তা নির্ধারণ করে।
- স্ট্রিক্ট-ট্রান্সপোর্ট-সিকিউরিটি (HSTS): ওয়েবসাইটের সাথে সমস্ত যোগাযোগের জন্য ব্রাউজারকে HTTPS ব্যবহার করতে বাধ্য করে।
- এক্স-ফ্রেম-অপশনস: ওয়েবসাইটটিকে iframe-এ এম্বেড করা থেকে বিরত রাখে, যা ক্লিকজ্যাকিং আক্রমণ প্রতিরোধ করে।
- এক্স-এক্সএসএস-প্রোটেকশন: ব্রাউজারের বিল্ট-ইন XSS ফিল্টার সক্রিয় করে। (দ্রষ্টব্য: প্রায়শই CSP দ্বারা প্রতিস্থাপিত হয় তবে এখনও একটি প্রতিরক্ষা স্তর সরবরাহ করতে পারে)।
- রেফারার-পলিসি: অনুরোধের সাথে পাঠানো রেফারার তথ্যের পরিমাণ নিয়ন্ত্রণ করে।
- ফিচার-পলিসি (এখন পারমিশনস-পলিসি): ডেভেলপারদের ব্রাউজার ফিচার এবং API গুলি বেছে বেছে সক্রিয় এবং নিষ্ক্রিয় করার অনুমতি দেয়।
কনটেন্ট সিকিউরিটি পলিসি (CSP)-এর গভীরে
কনটেন্ট সিকিউরিটি পলিসি (CSP) হলো একটি HTTP রেসপন্স হেডার যা নিয়ন্ত্রণ করে যে ইউজার এজেন্ট একটি নির্দিষ্ট পেজের জন্য কোন রিসোর্স লোড করার অনুমতি পাবে। এটি মূলত অনুমোদিত কন্টেন্টের উৎসগুলিকে হোয়াইটলিস্ট করে, যা XSS আক্রমণের ঝুঁকি উল্লেখযোগ্যভাবে হ্রাস করে। স্ক্রিপ্ট, স্টাইলশীট, ছবি এবং ফন্টের মতো রিসোর্সগুলি কোন উৎস থেকে লোড করা যাবে তা স্পষ্টভাবে নির্ধারণ করে, CSP আক্রমণকারীদের পক্ষে আপনার ওয়েবসাইটে ক্ষতিকারক কোড প্রবেশ করানো অনেক কঠিন করে তোলে।
CSP কীভাবে কাজ করে
CSP ব্রাউজারকে বিভিন্ন ধরনের কন্টেন্টের জন্য অনুমোদিত উৎসের একটি তালিকা প্রদান করে কাজ করে। যখন ব্রাউজার এমন একটি রিসোর্স খুঁজে পায় যা CSP লঙ্ঘন করে, তখন এটি রিসোর্সটি ব্লক করে এবং লঙ্ঘনের রিপোর্ট করে। এই ব্লকিং প্রক্রিয়াটি ক্ষতিকারক কোডকে কার্যকর হতে বাধা দেয়, এমনকি যদি একজন আক্রমণকারী এটি HTML-এ প্রবেশ করাতে সক্ষম হয়।
CSP নির্দেশিকা (Directives)
CSP নির্দেশিকা একটি CSP পলিসির মূল উপাদান। এগুলি বিভিন্ন ধরনের রিসোর্সের জন্য অনুমোদিত উৎসগুলি নির্দিষ্ট করে। কিছু সর্বাধিক ব্যবহৃত নির্দেশিকা হলো:
- default-src: সমস্ত রিসোর্স টাইপের জন্য ডিফল্ট উৎস সেট করে। এটি একটি ফলব্যাক নির্দেশিকা যা অন্য কোনো নির্দিষ্ট নির্দেশিকা সংজ্ঞায়িত না থাকলে প্রযোজ্য হয়।
- script-src: জাভাস্ক্রিপ্টের জন্য অনুমোদিত উৎস নির্দিষ্ট করে।
- style-src: CSS স্টাইলশীটের জন্য অনুমোদিত উৎস নির্দিষ্ট করে।
- img-src: ছবির জন্য অনুমোদিত উৎস নির্দিষ্ট করে।
- font-src: ফন্টের জন্য অনুমোদিত উৎস নির্দিষ্ট করে।
- media-src: অডিও এবং ভিডিওর জন্য অনুমোদিত উৎস নির্দিষ্ট করে।
- object-src: Flash-এর মতো প্লাগইনগুলির জন্য অনুমোদিত উৎস নির্দিষ্ট করে। (সাধারণত সম্ভব হলে প্লাগইন অনুমতি দেওয়া থেকে বিরত থাকা ভালো)।
- frame-src: ফ্রেম (iframes)-এর জন্য অনুমোদিত উৎস নির্দিষ্ট করে।
- connect-src: নেটওয়ার্ক অনুরোধের (AJAX, WebSockets) জন্য অনুমোদিত উৎস নির্দিষ্ট করে।
- base-uri:
<base>এলিমেন্টে ব্যবহার করা যেতে পারে এমন URL গুলিকে সীমাবদ্ধ করে। - form-action: যে URL গুলিতে ফর্ম জমা দেওয়া যেতে পারে সেগুলিকে সীমাবদ্ধ করে।
- frame-ancestors:
<frame>,<iframe>,<object>,<embed>, বা<applet>ব্যবহার করে একটি পেজ এম্বেড করতে পারে এমন বৈধ প্যারেন্টস নির্দিষ্ট করে। এই নির্দেশিকাটি ক্লিকজ্যাকিং থেকে সুরক্ষা প্রদান করে। - upgrade-insecure-requests: ব্যবহারকারী এজেন্টদের একটি সাইটের সমস্ত অসুরক্ষিত URL (HTTP এর মাধ্যমে লোড করা) এমনভাবে ব্যবহার করার নির্দেশ দেয় যেন সেগুলি সুরক্ষিত URL (HTTPS এর মাধ্যমে লোড করা) দ্বারা প্রতিস্থাপিত হয়েছে। এই নির্দেশিকাটি সেই ওয়েবসাইটগুলির জন্য উদ্দিষ্ট যা HTTP থেকে HTTPS-এ স্থানান্তরিত হচ্ছে।
- report-uri: একটি URL নির্দিষ্ট করে যেখানে ব্রাউজারকে CSP লঙ্ঘন সম্পর্কে রিপোর্ট পাঠাতে হবে। `report-to`-এর পক্ষে এটি এখন বাতিল।
- report-to: `Report-To` হেডারে সংজ্ঞায়িত একটি গ্রুপ নাম নির্দিষ্ট করে। এটি রিপোর্টিংয়ের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে, যার মধ্যে একাধিক রিপোর্টিং এন্ডপয়েন্ট নির্দিষ্ট করাও অন্তর্ভুক্ত।
CSP উৎস মান (Source Values)
উৎস মানগুলি সেই উৎসগুলিকে সংজ্ঞায়িত করে যেখান থেকে রিসোর্স লোড করার অনুমতি রয়েছে। কিছু সাধারণ উৎস মান হলো:
- *: যেকোনো উৎস থেকে কন্টেন্ট লোড করার অনুমতি দেয় (প্রোডাকশনে এটি ব্যবহার করা থেকে বিরত থাকুন!)।
- 'self': সুরক্ষিত ডকুমেন্টের একই উৎস (স্কিম, হোস্ট এবং পোর্ট) থেকে কন্টেন্ট লোড করার অনুমতি দেয়।
- 'none': কোনো উৎস থেকেই কন্টেন্ট লোড করার অনুমতি দেয় না।
- 'unsafe-inline': ইনলাইন জাভাস্ক্রিপ্ট এবং CSS ব্যবহারের অনুমতি দেয় (প্রোডাকশনে এটি ব্যবহার করা থেকে বিরত থাকুন!)।
- 'unsafe-eval': ডাইনামিক কোড মূল্যায়ন (যেমন,
eval(),Function()) ব্যবহারের অনুমতি দেয় (প্রোডাকশনে এটি ব্যবহার করা থেকে বিরত থাকুন!)। - 'strict-dynamic': নির্দিষ্ট করে যে মার্কআপে উপস্থিত একটি স্ক্রিপ্টকে একটি ননস বা হ্যাশের সাথে যুক্ত করে যে বিশ্বাস দেওয়া হয়েছে, তা সেই পূর্বপুরুষ দ্বারা লোড করা সমস্ত স্ক্রিপ্টে প্রচারিত হবে।
- 'unsafe-hashes': নির্দিষ্ট ইনলাইন ইভেন্ট হ্যান্ডলারদের অনুমতি দেয়। এটি সাধারণত এর জটিলতা এবং সীমিত সুবিধার কারণে নিরুৎসাহিত করা হয়।
- data:: ডেটা URL (যেমন, এমবেডেড ছবি) থেকে রিসোর্স লোড করার অনুমতি দেয়। সাবধানে ব্যবহার করুন।
- mediastream:: মিডিয়া উৎস হিসাবে `mediastream:` URI ব্যবহার করার অনুমতি দেয়।
- blob:: মিডিয়া উৎস হিসাবে `blob:` URI ব্যবহার করার অনুমতি দেয়।
- filesystem:: ফাইলসিস্টেম থেকে রিসোর্স লোড করার অনুমতি দেয়।
- https://example.com: একটি নির্দিষ্ট ডোমেইন এবং পোর্ট থেকে কন্টেন্ট লোড করার অনুমতি দেয়।
- *.example.com: example.com-এর যেকোনো সাবডোমেইন থেকে কন্টেন্ট লোড করার অনুমতি দেয়।
- nonce-{random-value}: একটি ম্যাচিং ননস অ্যাট্রিবিউট সহ স্ক্রিপ্ট বা স্টাইলগুলিকে অনুমতি দেয়। এর জন্য প্রতিটি অনুরোধের জন্য সার্ভার-সাইডে একটি র্যান্ডম ননস মান তৈরি করা প্রয়োজন।
- sha256-{hash-value}: একটি ম্যাচিং SHA256, SHA384, বা SHA512 হ্যাশ সহ স্ক্রিপ্ট বা স্টাইলগুলিকে অনুমতি দেয়।
CSP মোড: এনফোর্স বনাম শুধুমাত্র-রিপোর্ট
CSP দুটি মোডে স্থাপন করা যেতে পারে:
- এনফোর্স মোড: এই মোডে, ব্রাউজার CSP লঙ্ঘনকারী যেকোনো রিসোর্স ব্লক করে দেয়। প্রোডাকশন পরিবেশের জন্য এটি প্রস্তাবিত মোড। CSP `Content-Security-Policy` হেডার ব্যবহার করে পাঠানো হয়।
- শুধুমাত্র-রিপোর্ট মোড: এই মোডে, ব্রাউজার CSP লঙ্ঘনের রিপোর্ট করে কিন্তু রিসোর্সগুলিকে ব্লক করে না। এটি একটি CSP প্রয়োগ করার আগে পরীক্ষা এবং মূল্যায়ন করার জন্য দরকারী। CSP `Content-Security-Policy-Report-Only` হেডার ব্যবহার করে পাঠানো হয়।
CSP বাস্তবায়ন: একটি ধাপে ধাপে নির্দেশিকা
CSP বাস্তবায়ন করা কঠিন মনে হতে পারে, কিন্তু একটি কাঠামোগত পদ্ধতি অনুসরণ করে, আপনি কার্যকরভাবে আপনার ওয়েব অ্যাপ্লিকেশন সুরক্ষিত করতে পারেন।
১. একটি শুধুমাত্র-রিপোর্ট পলিসি দিয়ে শুরু করুন
শুধুমাত্র-রিপোর্ট মোডে একটি CSP স্থাপন করে শুরু করুন। এটি আপনাকে আপনার ওয়েবসাইটের কার্যকারিতা ব্যাহত না করে লঙ্ঘনগুলি পর্যবেক্ষণ করতে দেয়। লঙ্ঘনের রিপোর্ট একটি নির্দিষ্ট এন্ডপয়েন্টে পাঠাতে report-uri বা report-to নির্দেশিকা কনফিগার করুন।
উদাহরণ হেডার (শুধুমাত্র-রিপোর্ট):
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
২. লঙ্ঘনের রিপোর্ট বিশ্লেষণ করুন
কোন রিসোর্সগুলি ব্লক করা হচ্ছে এবং কেন হচ্ছে তা সনাক্ত করতে লঙ্ঘনের রিপোর্টগুলি সাবধানে বিশ্লেষণ করুন। এটি আপনাকে আপনার ওয়েবসাইটের রিসোর্স নির্ভরতা বুঝতে এবং সম্ভাব্য নিরাপত্তা দুর্বলতা সনাক্ত করতে সহায়তা করবে।
লঙ্ঘনের রিপোর্টগুলি সাধারণত কনফিগার করা report-uri বা report-to এন্ডপয়েন্টে JSON পেলোড হিসাবে পাঠানো হয়। এই রিপোর্টগুলিতে লঙ্ঘন সম্পর্কে তথ্য থাকে, যেমন ব্লক করা URI, লঙ্ঘিত নির্দেশিকা, এবং ডকুমেন্ট URI।
৩. CSP পলিসি পরিমার্জন করুন
লঙ্ঘনের রিপোর্টের উপর ভিত্তি করে, আপনার CSP পলিসি পরিমার্জন করুন যাতে বৈধ রিসোর্সগুলিকে অনুমতি দেওয়া হয় এবং একটি শক্তিশালী নিরাপত্তা অবস্থান বজায় থাকে। যে রিসোর্সগুলি ব্লক করা হচ্ছে তার জন্য নির্দিষ্ট উৎস মান যোগ করুন। ইনলাইন স্ক্রিপ্ট এবং স্টাইলের জন্য ননস বা হ্যাশ ব্যবহার করার কথা বিবেচনা করুন যাতে 'unsafe-inline' ব্যবহার এড়ানো যায়।
৪. এনফোর্স মোডে রূপান্তর করুন
একবার আপনি নিশ্চিত হন যে আপনার CSP পলিসি বৈধ রিসোর্স ব্লক করছে না, তখন এনফোর্স মোডে রূপান্তর করুন। এটি বাকি থাকা যেকোনো লঙ্ঘন ব্লক করবে এবং XSS আক্রমণের বিরুদ্ধে একটি শক্তিশালী নিরাপত্তা স্তর সরবরাহ করবে।
উদাহরণ হেডার (এনফোর্স):
Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report
৫. CSP পলিসি পর্যবেক্ষণ ও রক্ষণাবেক্ষণ করুন
CSP একটি 'সেট-এন্ড-ফরগেট' সমাধান নয়। আপনার CSP পলিসি ক্রমাগত পর্যবেক্ষণ করা এবং আপনার ওয়েবসাইট বিকশিত হওয়ার সাথে সাথে এবং নতুন নিরাপত্তা হুমকি দেখা দিলে এটি আপডেট করা অপরিহার্য। নিয়মিত লঙ্ঘনের রিপোর্ট পর্যালোচনা করুন এবং প্রয়োজন অনুযায়ী পলিসি সামঞ্জস্য করুন।
বাস্তব CSP উদাহরণ
আসুন বিভিন্ন পরিস্থিতির জন্য কিছু বাস্তব CSP উদাহরণ দেখি:
উদাহরণ ১: একটি সাধারণ ওয়েবসাইটের জন্য বেসিক CSP
এই CSP একই উৎস থেকে কন্টেন্টের অনুমতি দেয় এবং যেকোনো উৎস থেকে ছবির অনুমতি দেয়।
Content-Security-Policy: default-src 'self'; img-src *
উদাহরণ ২: নির্দিষ্ট স্ক্রিপ্ট এবং স্টাইল উৎস সহ CSP
এই CSP একই উৎস এবং একটি নির্দিষ্ট CDN থেকে স্ক্রিপ্টের অনুমতি দেয়, এবং একই উৎস ও ইনলাইন স্টাইলের অনুমতি দেয়।
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'
উদাহরণ ৩: ইনলাইন স্ক্রিপ্টের জন্য ননস সহ CSP
এই CSP প্রতিটি ইনলাইন স্ক্রিপ্টের জন্য একটি অনন্য ননস প্রয়োজন।
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-r4nd0mn0nc3'
HTML:
<script nonce="r4nd0mn0nc3">console.log('Hello, world!');</script>
গুরুত্বপূর্ণ: ননস মানটি প্রতিটি অনুরোধের জন্য সার্ভারে ডাইনামিকভাবে তৈরি করতে হবে। এটি আক্রমণকারীদের ননস পুনরায় ব্যবহার করা থেকে বিরত রাখে।
উদাহরণ ৪: ক্লিকজ্যাকিং প্রতিরোধের জন্য ফ্রেম অ্যানসেস্টর সীমাবদ্ধ করা CSP
এই CSP `https://example.com` ছাড়া অন্য কোনো ডোমেইনে পেজটিকে iframe-এ এমবেড করা থেকে বিরত রাখে।
Content-Security-Policy: frame-ancestors 'self' https://example.com
উদাহরণ ৫: 'strict-dynamic' এবং 'self'-এ একটি ফলব্যাক ব্যবহার করে একটি আরও কঠোর CSP
এই CSP আধুনিক ব্রাউজারগুলির জন্য `strict-dynamic`-এর সুবিধা নেয় এবং একই সাথে এটি সমর্থন করে না এমন পুরানো ব্রাউজারগুলির জন্যও সমর্থন বজায় রাখে। লঙ্ঘনের পর্যবেক্ষণের জন্য এটি একটি `report-uri`-ও অন্তর্ভুক্ত করে।
Content-Security-Policy: default-src 'self'; script-src 'strict-dynamic' 'nonce-{random-nonce}' 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report
মনে রাখবেন, সার্ভার-সাইডে `{random-nonce}`-কে একটি ডাইনামিকভাবে তৈরি করা ননস মান দিয়ে প্রতিস্থাপন করতে হবে।
CSP এবং সিঙ্গেল-পেজ অ্যাপ্লিকেশন (SPAs)
সিঙ্গেল-পেজ অ্যাপ্লিকেশনগুলিতে (SPAs) CSP বাস্তবায়ন করা চ্যালেঞ্জিং হতে পারে কারণ এই অ্যাপ্লিকেশনগুলির গতিশীল প্রকৃতি। SPAs প্রায়শই জাভাস্ক্রিপ্টের উপর ব্যাপকভাবে নির্ভর করে DOM তৈরি এবং ম্যানিপুলেট করার জন্য, যা সাবধানে পরিচালনা না করলে CSP লঙ্ঘনের কারণ হতে পারে।
SPAs-এ CSP বাস্তবায়নের জন্য এখানে কিছু টিপস রয়েছে:
'unsafe-inline'এবং'unsafe-eval'এড়িয়ে চলুন: এই নির্দেশিকাগুলি SPAs-এ যখনই সম্ভব এড়ানো উচিত। এগুলি আপনার অ্যাপ্লিকেশনের নিরাপত্তাকে উল্লেখযোগ্যভাবে দুর্বল করে দেয়।- ননস বা হ্যাশ ব্যবহার করুন: ইনলাইন স্ক্রিপ্ট এবং স্টাইলের জন্য ননস বা হ্যাশ ব্যবহার করুন। এটি SPAs-এর জন্য প্রস্তাবিত পদ্ধতি।
- ট্রাস্টেড টাইপস বিবেচনা করুন: ট্রাস্টেড টাইপস একটি ব্রাউজার API যা DOM-ভিত্তিক XSS দুর্বলতা প্রতিরোধে সহায়তা করে। নিরাপত্তাকে আরও বাড়ানোর জন্য এটি CSP-এর সাথে একত্রে ব্যবহার করা যেতে পারে।
- একটি CSP-সম্মত ফ্রেমওয়ার্ক ব্যবহার করুন: কিছু ফ্রন্টএন্ড ফ্রেমওয়ার্ক (যেমন নির্দিষ্ট কনফিগারেশন সহ React, Angular, এবং Vue.js) আপনাকে আরও সহজে CSP বাস্তবায়ন করতে সহায়তা করার জন্য বৈশিষ্ট্য সরবরাহ করে।
অন্যান্য গুরুত্বপূর্ণ ফ্রন্টএন্ড সিকিউরিটি হেডার
যদিও CSP ফ্রন্টএন্ড নিরাপত্তার একটি ভিত্তি, অন্যান্য হেডারগুলি একটি ব্যাপক প্রতিরক্ষা কৌশল প্রদানে গুরুত্বপূর্ণ ভূমিকা পালন করে:
স্ট্রিক্ট-ট্রান্সপোর্ট-সিকিউরিটি (HSTS)
Strict-Transport-Security (HSTS) হেডার ব্রাউজারকে ওয়েবসাইটের সাথে সংযোগের জন্য সর্বদা HTTPS ব্যবহার করার নির্দেশ দেয়। এটি ম্যান-ইন-দ্য-মিডল আক্রমণ প্রতিরোধ করে যা সংযোগকে HTTP-তে ডাউনগ্রেড করার চেষ্টা করে।
উদাহরণ হেডার:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age: সময়কাল (সেকেন্ডে) নির্দিষ্ট করে যার জন্য ব্রাউজারকে কেবল HTTPS এর মাধ্যমে সাইট অ্যাক্সেস করার কথা মনে রাখতে হবে। প্রোডাকশন পরিবেশের জন্য 31536000 সেকেন্ড (১ বছর) এর একটি মান সুপারিশ করা হয়।includeSubDomains: নির্দেশ করে যে HSTS পলিসি ডোমেইনের সমস্ত সাবডোমেইনে প্রযোজ্য।preload: ডোমেইনটিকে HSTS-সক্ষম ডোমেইনের একটি তালিকায় অন্তর্ভুক্ত করার অনুমতি দেয় যা ব্রাউজারে প্রি-লোড করা থাকে। এর জন্য আপনার ডোমেইনটি Google দ্বারা পরিচালিত HSTS প্রিলোড তালিকায় জমা দিতে হবে।
এক্স-ফ্রেম-অপশনস
X-Frame-Options হেডার ওয়েবসাইটটিকে iframe-এ এমবেড করা যাবে কিনা তা নিয়ন্ত্রণ করে ক্লিকজ্যাকিং আক্রমণ প্রতিরোধ করে।
উদাহরণ হেডার:
X-Frame-Options: DENY
সম্ভাব্য মান:
DENY: উৎস নির্বিশেষে পেজটিকে iframe-এ প্রদর্শন করা থেকে বিরত রাখে।SAMEORIGIN: পেজটিকে iframe-এ প্রদর্শনের অনুমতি দেয় কেবল যদি iframe-এর উৎস পেজের উৎসের সাথে মেলে।ALLOW-FROM uri: পেজটিকে iframe-এ প্রদর্শনের অনুমতি দেয় কেবল যদি iframe-এর উৎস নির্দিষ্ট URI-এর সাথে মেলে। দ্রষ্টব্য: এই বিকল্পটি বাতিল এবং সমস্ত ব্রাউজার দ্বারা সমর্থিত নাও হতে পারে।
দ্রষ্টব্য: CSP-এর frame-ancestors নির্দেশিকা ফ্রেমিং নিয়ন্ত্রণের জন্য আরও নমনীয় এবং শক্তিশালী উপায় সরবরাহ করে এবং সাধারণত X-Frame-Options-এর চেয়ে পছন্দনীয়।
এক্স-এক্সএসএস-প্রোটেকশন
X-XSS-Protection হেডার ব্রাউজারের অন্তর্নির্মিত XSS ফিল্টার সক্রিয় করে। যদিও CSP XSS আক্রমণ প্রতিরোধের জন্য একটি আরও শক্তিশালী সমাধান, এই হেডারটি একটি অতিরিক্ত প্রতিরক্ষা স্তর সরবরাহ করতে পারে, বিশেষত পুরানো ব্রাউজারগুলির জন্য যা সম্পূর্ণরূপে CSP সমর্থন নাও করতে পারে।
উদাহরণ হেডার:
X-XSS-Protection: 1; mode=block
1: XSS ফিল্টার সক্রিয় করে।0: XSS ফিল্টার নিষ্ক্রিয় করে।mode=block: যদি একটি XSS আক্রমণ সনাক্ত করা হয় তবে ব্রাউজারকে পেজটি ব্লক করার নির্দেশ দেয়।report=uri: একটি URL নির্দিষ্ট করে যেখানে ব্রাউজারকে একটি রিপোর্ট পাঠাতে হবে যদি একটি XSS আক্রমণ সনাক্ত করা হয়।
রেফারার-পলিসি
Referrer-Policy হেডার অনুরোধের সাথে পাঠানো রেফারার তথ্যের পরিমাণ নিয়ন্ত্রণ করে। রেফারার তথ্য ব্যবহারকারীদের ওয়েবসাইট জুড়ে ট্র্যাক করতে ব্যবহার করা যেতে পারে, তাই এটি নিয়ন্ত্রণ করা ব্যবহারকারীর গোপনীয়তা উন্নত করতে পারে।
উদাহরণ হেডার:
Referrer-Policy: strict-origin-when-cross-origin
কিছু সাধারণ মান:
no-referrer: কখনও Referer হেডার পাঠায় না।no-referrer-when-downgrade: TLS (HTTPS) ছাড়া উৎসগুলিতে Referer হেডার পাঠায় না।origin: Referer হেডারে কেবল উৎস (স্কিম, হোস্ট এবং পোর্ট) পাঠায়।origin-when-cross-origin: ক্রস-অরিজিন অনুরোধের জন্য উৎস এবং একই-অরিজিন অনুরোধের জন্য সম্পূর্ণ URL পাঠায়।same-origin: একই-অরিজিন অনুরোধের জন্য Referer হেডার পাঠায়, কিন্তু ক্রস-অরিজিন অনুরোধের জন্য নয়।strict-origin: প্রোটোকল নিরাপত্তা স্তর একই থাকলে (HTTPS থেকে HTTPS) কেবল উৎস পাঠায়, কিন্তু একটি কম সুরক্ষিত গন্তব্যে (HTTPS থেকে HTTP) কোনো হেডার পাঠায় না।strict-origin-when-cross-origin: একই-অরিজিন অনুরোধ করার সময় উৎস পাঠায়। ক্রস-অরিজিন অনুরোধের জন্য, প্রোটোকল নিরাপত্তা স্তর একই থাকলে (HTTPS থেকে HTTPS) কেবল উৎস পাঠায়, কিন্তু একটি কম সুরক্ষিত গন্তব্যে (HTTPS থেকে HTTP) কোনো হেডার পাঠায় না।unsafe-url: উৎস নির্বিশেষে Referer হেডারে সম্পূর্ণ URL পাঠায়। অত্যন্ত সতর্কতার সাথে ব্যবহার করুন, কারণ এটি সংবেদনশীল তথ্য প্রকাশ করতে পারে।
পারমিশনস-পলিসি (পূর্বে ফিচার-পলিসি)
Permissions-Policy হেডার (পূর্বে Feature-Policy নামে পরিচিত) ডেভেলপারদের ব্রাউজার ফিচার এবং API গুলি বেছে বেছে সক্রিয় এবং নিষ্ক্রিয় করার অনুমতি দেয়। এটি আপনার অ্যাপ্লিকেশনের অ্যাটাক সারফেস কমাতে এবং ব্যবহারকারীর গোপনীয়তা উন্নত করতে সহায়তা করতে পারে।
উদাহরণ হেডার:
Permissions-Policy: geolocation=()
এই উদাহরণটি ওয়েবসাইটের জন্য জিওলোকেশন API নিষ্ক্রিয় করে।
Permissions-Policy দিয়ে নিয়ন্ত্রণ করা যায় এমন অন্যান্য ফিচারগুলির মধ্যে রয়েছে:
cameramicrophonegeolocationaccelerometergyroscopemagnetometerusbmidipaymentfullscreen
বিভিন্ন প্ল্যাটফর্মে সিকিউরিটি হেডার সেট করা
সিকিউরিটি হেডার সেট করার পদ্ধতিটি আপনি কোন ওয়েব সার্ভার বা প্ল্যাটফর্ম ব্যবহার করছেন তার উপর নির্ভর করে পরিবর্তিত হয়। এখানে কিছু সাধারণ উদাহরণ দেওয়া হলো:
Apache
আপনি Apache-তে .htaccess ফাইল বা সার্ভার কনফিগারেশন ফাইলে (httpd.conf) সিকিউরিটি হেডার যোগ করে সেট করতে পারেন।
উদাহরণ .htaccess কনফিগারেশন:
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report"
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header set X-Frame-Options "DENY"
Header set X-XSS-Protection "1; mode=block"
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
Nginx
আপনি Nginx কনফিগারেশন ফাইলের (nginx.conf) সার্ভার ব্লকে সিকিউরিটি হেডার যোগ করে Nginx-এ সেট করতে পারেন।
উদাহরণ Nginx কনফিগারেশন:
server {
listen 443 ssl;
server_name example.com;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header X-Frame-Options "DENY";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
...
}
Node.js (Express)
আপনি Node.js-এ Helmet-এর মতো মিডলওয়্যার ব্যবহার করে সিকিউরিটি হেডার সেট করতে পারেন।
Helmet ব্যবহার করে উদাহরণ:
const express = require('express');
const helmet = require('helmet');
const app = express();
app.use(helmet());
// প্রয়োজন হলে CSP কাস্টমাইজ করুন
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "https://cdn.example.com"],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", "data:"],
reportUri: '/csp-report'
},
}));
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
Cloudflare
Cloudflare আপনাকে তাদের Page Rules বা Transform Rules ব্যবহার করে সিকিউরিটি হেডার সেট করার অনুমতি দেয়।
আপনার সিকিউরিটি হেডার পরীক্ষা করা
সিকিউরিটি হেডার বাস্তবায়নের পর, সেগুলি সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য পরীক্ষা করা অত্যন্ত গুরুত্বপূর্ণ। বেশ কয়েকটি অনলাইন টুল আপনাকে আপনার ওয়েবসাইটের সিকিউরিটি হেডার বিশ্লেষণ করতে সহায়তা করতে পারে:
- SecurityHeaders.com: সিকিউরিটি হেডার বিশ্লেষণের জন্য একটি সহজ এবং কার্যকর টুল।
- Mozilla Observatory: সিকিউরিটি হেডার সহ ওয়েবসাইট নিরাপত্তা পরীক্ষার জন্য একটি ব্যাপক টুল।
- WebPageTest.org: আপনাকে ওয়াটারফল চার্টে HTTP হেডার দেখতে দেয়।
উপসংহার
ফ্রন্টএন্ড সিকিউরিটি হেডার, বিশেষ করে কনটেন্ট সিকিউরিটি পলিসি (CSP), ওয়েব অ্যাপ্লিকেশনগুলিকে বিভিন্ন আক্রমণ থেকে রক্ষা করতে এবং ব্যবহারকারীর নিরাপত্তা বাড়াতে অপরিহার্য। এই হেডারগুলি সাবধানে বাস্তবায়ন এবং রক্ষণাবেক্ষণ করে, আপনি XSS, ক্লিকজ্যাকিং এবং অন্যান্য নিরাপত্তা দুর্বলতার ঝুঁকি উল্লেখযোগ্যভাবে কমাতে পারেন। মনে রাখবেন, একটি শুধুমাত্র-রিপোর্ট পলিসি দিয়ে শুরু করুন, লঙ্ঘনের রিপোর্ট বিশ্লেষণ করুন, পলিসি পরিমার্জন করুন এবং তারপর এনফোর্স মোডে রূপান্তর করুন। আপনার ওয়েবসাইট বিকশিত হওয়ার সাথে সাথে এবং নতুন হুমকি দেখা দিলে আপনার ওয়েবসাইটকে সুরক্ষিত রাখতে নিয়মিত আপনার সিকিউরিটি হেডারগুলি পর্যবেক্ষণ এবং আপডেট করুন।
ফ্রন্টএন্ড নিরাপত্তায় একটি সক্রিয় দৃষ্টিভঙ্গি গ্রহণ করে, আপনি আরও সুরক্ষিত এবং বিশ্বাসযোগ্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন যা আপনার ব্যবহারকারী এবং আপনার ব্যবসাকে রক্ষা করে।